Distributed systems typically require the accurate, coordinated timing of process steps and task sequences to facilitate overall event synchronization and data correlation. Even when initially set accurately, clocks used in the various devices of the distributed system will differ over time due to inherent clock drift. Each clock frequency source, typically a crystal oscillator, can run at slightly different rates. Error can thus accumulate over time. Operating environment, age, and other factors affect each physical clock somewhat differently, and thus can affect the rate of change and accumulated error within the distributed system as a whole.
Clock synchronization algorithms are therefore essential for managing system resources and controlling communication between nodes of the system. For proper clock synchronization, each node either accesses timing signals originating from a common time source, for instance global positioning satellite signals, or the nodes synchronize their individual local logical time clocks in a distributed way using knowledge from the other nodes.